using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Content.Pipeline;
using Microsoft.Xna.Framework.Content.Pipeline.Graphics;
using Microsoft.Xna.Framework.Content.Pipeline.Processors;
using System.IO;

namespace CF.Framework.Convertor
{
	/// <summary>
	/// This class will be instantiated by the XNA Framework Content Pipeline
	/// to apply custom processing to content data, converting an object of
	/// type TInput to TOutput. The input and output types may be the same if
	/// the processor wishes to alter data without changing its type.
	///
	/// This should be part of a Content Pipeline Extension Library project.
	///
	/// TODO: change the ContentProcessor attribute to specify the correct
	/// display name for this processor.
	/// </summary>
	[ContentProcessor(DisplayName = "Font - CF Framework")]
	public class FontContentProcessor : FontDescriptionProcessor
	{
		public override SpriteFontContent Process(FontDescription input, ContentProcessorContext context)
		{
			HashSet<char> cache = new HashSet<char>();

			foreach (string file in Directory.GetFiles(Path.GetFullPath(@"."), "*.xml", SearchOption.AllDirectories))
			{
				context.AddDependency(file);

				string letters = File.ReadAllText(file, System.Text.Encoding.UTF8);

				foreach (char c in letters)
				{
					if (cache.Contains(c))
					{
						continue;
					}

					cache.Add(c);

					input.Characters.Add(c);
				}
			}
			
			return base.Process(input, context);
		}
	}
}